package com.itany.mall.action;

import java.util.Scanner;

import com.itany.mall.constant.UserRoleEnum;
import com.itany.mall.entity.User;
import com.itany.mall.exception.UserNotFoundException;
import com.itany.mall.factory.Autowired;
import com.itany.mall.factory.ObjectFactory;
import com.itany.mall.service.UserService;

// 如果给action类加@Component注解, 交给工厂管理
// 工厂是可以自动进行属性装配的, 就不需要写构造代码块
// 调用工厂方法, 让工厂帮助进行属性装配
// 那么, 获取action类对象时, 也应当从工厂获取, 不能自己new对象
public class MainAction {

	@Autowired
	private UserService userService;

	// 由于action类对象是自己new的, 不是由工厂管理的
	// 工厂不会自动进行属性的装配
	// 可以在构造代码块中将this对象交给工厂, 进行属性的装配工作
	{
		ObjectFactory.autowired(this);
	}

	public void menu() {
		do {
			System.out.println("1. 登录");
			System.out.println("2. 退出程序");
			System.out.println("请选择");
			switch (new Scanner(System.in).nextLine()) {
				case "1":
					login();
					break;
				case "2":
					System.out.println("再见!");
					System.exit(0);
					break;
				default:
					System.out.println("选择错误");
			}
		} while (true);
	}

	private void login() {
		System.out.println("请输入用户名/手机号码/邮箱");
		String name = new Scanner(System.in).nextLine();
		if (name == null || name.isEmpty()) {
			System.out.println("登录名不可为空");
			return;
		}

		System.out.println("请输入密码");
		String password = new Scanner(System.in).nextLine();
		if (password == null || password.isEmpty()) {
			System.out.println("密码不可为空");
			return;
		}

		try {
			User loginUser = userService.login(name, password);
			if (loginUser.getRole().equals(UserRoleEnum.ADMIN.getRoleCode())) {
				new AdminAction().menu();
				return;
			}
			new NormalAction(loginUser).menu();
		} catch (UserNotFoundException e) {
			System.out.println("登录名或密码错误");
		}
	}

}
